package com.ntd.util.img;

import java.awt.*;
import java.awt.image.BufferedImage;

public class UtilImg {

    // 比较邪乎了，为啥是30，不是20，其实20也可以，就是一个优化参数
    private static final int critical = 30;

    /**
     * 处理图片背景色
     * @return
     */
    public static BufferedImage handleBufferImageBackgroundRGB(BufferedImage bufferedImage, int targetRgb) throws Exception {

        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();

        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        // 获取左上角颜色，默认左上角像素块颜色为背景色
        int pixel = bufferedImage.getRGB(critical, critical);

        /**
         * 这里是遍历图片的像素，因为要处理图片的背色，所以要把指定像素上的颜色换成目标颜色
         * 这里 是一个二层循环，遍历长和宽上的每个像素
         */
        Graphics g = image.getGraphics();
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                // 得到指定像素（i,j)上的RGB值
                int nowPixel = bufferedImage.getRGB(x, y);
                // 进行换色操作，我这里是要把蓝底换成白底，那么就判断图片中rgb值是否在蓝色范围的像素
                // 核心代码：但是这样会有误差，还需要优化边缘、人像边框
                int p = pixel == nowPixel ? targetRgb : nowPixel;
                g.setColor(new Color(p));
                g.fillRect(x, y, 1, 1);
            }
        }
        return image;
    }
}
